package com.xiaoshuidi.cloud.module.contract.service.contract;

import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.TabletContractRespVO;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.signingSubject.ContractSignCallbackReqVO;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ElectronicContractGenerateRespVO;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.signingSubject.ContractTabletSignCallbackReqVO;


/**
 * 电子合同 Service 接口
 *
 * @author 合房租赁
 */
public interface ElectronicContractService {

    /**
     * 生成电子合同
     *
     * @param contractId 合同id
     * @return
     */
    ElectronicContractGenerateRespVO generateElectronicContract(Long contractId);
    /**
     * 电子签约（甲方）
     *
     * @param contractId 合同id
     * @return
     */
    ElectronicContractGenerateRespVO autoSign(Long contractId);

    /**
     * 电子签约（乙方）
     *
     * @param contractId 合同id
     * @param phone 签约手机号
     * @return
     */
    String extsign(Long contractId, String phone);

    /**
     * 签署结果异步通知
     * @param reqVO
     * @return: void
     *
     */
    void signCallback(ContractSignCallbackReqVO reqVO);

    /**
     * 根据合同编号删除电子合同
     * @param contractId
     * @return: void
     */
    void deleteByContractId(Long contractId);

    /**
     * 获取安全协议签署地址
     * @param memberId
     * @return: java.lang.String
     */
    String getSafeProtocolSignAddr(Long memberId);

    /**
     * 安全协议签署结果异步通知
     * @param reqVO
     * @return: void
     *
     */
    void signSecurityProtocolCallback(ContractSignCallbackReqVO reqVO);

    /**
     * 获取下载地址
     * @param contractId
     * @return: java.lang.String
     */
    String getDownloadUrl(Long contractId);

    /**
     * 生成业主电子合同
     * @param contractId
     * @return: com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ElectronicContractGenerateRespVO
     */
    ElectronicContractGenerateRespVO generateOwnerElectronicContract(Long contractId);

    /**
     * 业主电子签约（甲方）
     *
     * @param contractId 合同id
     * @return
     */
    ElectronicContractGenerateRespVO ownerAutoSign(Long contractId);

    /**
     * 业主合同电子签约（乙方）
     *
     * @param contractId 合同id
     * @param phone 签约手机号
     * @return
     */
    String ownerExtsign(Long contractId, String phone);

    /**
     * 手写板签约结果异步回调
     * @param reqVO
     */
    void tabletSignCallback(ContractTabletSignCallbackReqVO reqVO);

    TabletContractRespVO tabletContractSign(Long contractId);
}
